package 递归回溯;

import java.util.ArrayList;
import java.util.List;

public class No1286字母组合迭代器 {

    /**
     * 请你设计一个迭代器类，包括以下内容：
     *
     * 一个构造函数，输入参数包括：一个 有序且字符唯一 的字符串 characters（该字符串只包含小写英文字母）和一个数字 combinationLength 。
     * 函数 next() ，按 字典序 返回长度为 combinationLength 的下一个字母组合。
     * 函数 hasNext() ，只有存在长度为 combinationLength 的下一个字母组合时，才返回 True；否则，返回 False。
     *  
     *
     * 示例：
     *
     * CombinationIterator iterator = new CombinationIterator("abc", 2); // 创建迭代器 iterator
     *
     * iterator.next(); // 返回 "ab"
     * iterator.hasNext(); // 返回 true
     * iterator.next(); // 返回 "ac"
     * iterator.hasNext(); // 返回 true
     * iterator.next(); // 返回 "bc"
     * iterator.hasNext(); // 返回 false
     */

    private List<String> list;
    private int index;

    public No1286字母组合迭代器(String characters, int combinationLength) {
        list=new ArrayList<>();
        this.size=combinationLength;
        this.path=new StringBuilder();
        if(characters!=null&&characters.length()>0){
            this.arr=characters.toCharArray();
            dg(0);
        }
    }

    public String next() {
        return list.get(index++);
    }

    public boolean hasNext() {
        return list.size()!=index;
    }

    private char[] arr;
    private int size;
    private StringBuilder path;

    public void dg(int start){

        if(path.length()==size){
            list.add(new String(path));
            return;
        }

        /**
         *
         */

        for (int i = start; i < arr.length; i++) {
            path.append(arr[i]);
            dg(i+1);
            path.deleteCharAt(path.length()-1);
        }

    }

    public static void main(String[] args) {
        No1286字母组合迭代器 n=new No1286字母组合迭代器("abc",2);
        System.out.println("1");
    }

}
